//
//  WBUserAccountViewModel.swift
//  WeiBo
//
//  Created by 韩菲菲 on 16/8/11.
//  Copyright © 2016年 韩菲菲. All rights reserved.
//

import UIKit

class WBUserAccountViewModel: NSObject {
    
    //单例
    static let sharedUserAccountViewModel: WBUserAccountViewModel = WBUserAccountViewModel()
    
    //路径
    let file = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString).stringByAppendingPathComponent("userAccount.archiver")
    
    
    //用户信息属性，防止重复操作沙盒
    var userAccount:WBUserAccountModel?
    
    //token属性
    var accessToken : String? {
        
        //用户信息里面存储token
        //token存在或者不存在 如果不存在，就说明是第一次登录，返回NIl
        //如果存在 判断用户信息里面存储的过期时间和现在的时间相比，是否过期
        //如果过期 就返回Nil 不要再用这个token去请求数据了
        //如果没有过期，就返回用户信息里面的token
        if userAccount?.access_token != nil{//token存在的情况下
            //判断有没有过期
            if userAccount?.expires_Date?.compare(NSDate()) == NSComparisonResult.OrderedDescending{
               //没有过期
                return userAccount?.access_token
            
            }
            else
            {
            //过期了
                return nil
            }
        
        }else
        {
        //token不存在
            return nil
        
        }
        
    }
    
    //判断用户是否登录
    var isLogin: Bool {
        return accessToken != nil
    }
    
    override init() {
        
        super.init()
        //给个人信息赋值
        userAccount = getUserAccount()
        
    }
}

//保存数据(归档 解档)
extension WBUserAccountViewModel{
    //归档
    func saveUserAccount(userAccount: WBUserAccountModel) {
        //归档之前先给属性赋值
        self.userAccount = userAccount
        
        NSKeyedArchiver.archiveRootObject(userAccount, toFile: file)
        
        print(file)
        
    }
    
    //解档
    func getUserAccount() -> WBUserAccountModel? {
        
        let result = NSKeyedUnarchiver.unarchiveObjectWithFile(file) as? WBUserAccountModel
        
        return result
        
    }
    
}


//请求数据
extension WBUserAccountViewModel{
    
    //根据code请求token
    func getUserAccount(code:String , finish:(isSuccess: Bool)->()) {
        
        WBNetworkingTool.sharedTool.getUserToken(code, success: { (response) in
            
            guard let result = response as? [String: AnyObject] else{
                
                //这是失败的情况 返回失败
                finish(isSuccess: false)
                
                return
            }
            //创建模型
            let userAccount = WBUserAccountModel(dict: result)
            //成功的情况下，再去请求数据
            //根据请求到的code去请求头像和昵称
            self.getUserInfo(userAccount, finish: finish)
            
        }) { (error) in
            
            print("请求失败\(error)")
            //这是失败的情况 返回失败
            finish(isSuccess: false)
            
        }
        
    }
    
    //根据token请求个人信息
    private func getUserInfo(userAccount:WBUserAccountModel , finish: (isSuccess: Bool)->()){
        
        WBNetworkingTool.sharedTool.getUserInfo(userAccount, success: { (response) in
            
            //screen_name avatar_large 把这两个字段给模型赋值
            guard let result = response as? [String: AnyObject] else{
                finish(isSuccess: false)
                //失败情况
                return
            }
            
            //给模型赋值
            userAccount.avatar_large = result["avatar_large"] as? String
            userAccount.screen_name = result["screen_name"] as? String
            
            //返回成功
            finish(isSuccess: true)
            //归档数据
            self.saveUserAccount(userAccount)
            
            
        }) { (error) in
            
            print("请求失败:\(error)")
            finish(isSuccess: false)
        }
    }
    
    
    
    
    
    
}